//
//  ViewController.m
//  QQ聊天界面
//
//  Created by MAC on 16-3-11.
//  Copyright (c) 2016年 ___FULLUSERNAME___. All rights reserved.
//

#import "ViewController.h"
#import "CZMessage.h"
#import "CZMessageFrame.h"
#import "CZMessageCell.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate,UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *UItext;
@property (weak, nonatomic) IBOutlet UITableView *tableView;


//需要一个frame模型对象来保存所有的消息
@property(nonatomic,strong)NSMutableArray* messageFrames;
@end

@implementation ViewController

//懒加载数据，重写messageFrames的get方法
-(NSMutableArray*)messageFrames
{
    if (_messageFrames == nil) {
        //加载数据
        //1.读取plist文件
        NSString* path = [[NSBundle mainBundle]pathForResource:@"messages.plist" ofType:nil];
        NSArray * arrayDict = [NSArray arrayWithContentsOfFile:path];
        //2.字典转模型
        
        NSMutableArray * arrayModels = [NSMutableArray array];
        for (NSDictionary* dict in arrayDict) {
            //创建数据模型
            CZMessage * model = [CZMessage messageWithDict:dict];
            //创建frame模型
            CZMessageFrame * modelFrame = [[CZMessageFrame alloc]init];
            //设置frame模型的message属性为model
            modelFrame.message = model;
            //把frame模型加入到数组
            [arrayModels addObject:modelFrame];
        }
        _messageFrames = arrayModels;
    }
    return _messageFrames;
}


- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    //self.tableView.dataSource = self;
    
    self.tableView.backgroundColor = [UIColor colorWithRed:226/255.0 green:226/255.0 blue:226/255.0 alpha:1.0];
    //去除tableView
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    
    //处理键盘弹出事件，不需要管通知的发布者
    //通知的监听
    //1.要创建一个NSNotificationCenter对象用来监听
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    //2.监听消息弹出的事件
    [center addObserver:self selector:@selector(keyboardUp:) name:UIKeyboardWillChangeFrameNotification object:nil];
    
}

//通知键盘弹出事件的执行
- (void)keyboardUp:(NSNotification*)notoInfo
{
    //NSLog(@"请注意：键盘被平移升起了");
    //NSLog(@"%@",userInfo);
    //获取键盘的Y值
    CGRect rectEnd = [notoInfo.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGFloat keyboardY = rectEnd.origin.y;
    //计算聊天记录和输入框的平移高度
    CGFloat upValue = keyboardY - self.view.frame.size.height;
    //实现平移
    //以0.25秒的动画平移
    [UIView animateWithDuration:0.25 animations:^{
        self.view.transform = CGAffineTransformMakeTranslation(0, upValue);

    }];
    //当键盘弹出的时候让最后一行显示到最上面
    //1.获取最后一行的indexpath
    NSIndexPath *lastindexPath = [NSIndexPath indexPathForRow:self.messageFrames.count-1 inSection:0];
    //2.将最后一行平移到最上面
    [self.tableView scrollToRowAtIndexPath:lastindexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
    
}

//移除通知
- (void)dealloc
{
    [[NSNotificationCenter defaultCenter ]removeObserver:self];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}




//textField代理方法
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    //获取文字内容
    NSString *text = textField.text;
    //我的发送消息的内容
    [self sendMessage:CZMessageTypeMe withText:text];
    //自动回复
    [self sendMessage:CZMessageTypeOther withText:@"您好，你发送的消息已被对方拉黑，请重新加好友！"];
    
    
    NSLog(@"发送按钮被点击，输入框已知道您的发送消息");
    //1.获取文本框的输入内容
   // NSString *textstring = [NSString stringWithFormat:self.UItext.text];
    //NSString *textsting = [[NSString alloc]init];
    //textsting = self.UItext.text;

    //7.清空输入框里的文字
    textField.text = nil;
    
    return YES;
}

//封装发送消息的方法
- (void)sendMessage:(CZMessageType)type withText:(NSString *)text
{
    //NSString *textsting = textField.text;
    //2.创建一个数据模型
    CZMessage *model = [CZMessage new];
    //设置模型的正文
    model.text = text;
    //设置模型的时间，获取系统当前的时间
    NSDate * nowdate = [NSDate date];
    //设置时间格式化（今天 10：32）
    NSDateFormatter *farmatter = [[NSDateFormatter alloc]init];
    //设置时间格式
    farmatter.dateFormat = @"今天 HH:mm";
    //设置数据模型的时间
    model.time = [farmatter stringFromDate:nowdate];
    //设置数据模型的头像
    model.type = type;
    
    //3.创建一个frame模型
    CZMessageFrame *modelFrame = [[CZMessageFrame alloc]init];
    modelFrame.message = model;
    
    //4.将建好的frame模型对象添加到模型数组当中
    [self.messageFrames addObject:modelFrame];
    
    //5.刷新UItableView的数据
    [self.tableView reloadData];
    //6.把最后一行滚动到最上面
    //当键盘弹出的时候让最后一行显示到最上面
    //1.获取最后一行的indexpath
    NSIndexPath *lastindexPath = [NSIndexPath indexPathForRow:self.messageFrames.count-1 inSection:0];
    //2.将最后一行平移到最上面
    [self.tableView scrollToRowAtIndexPath:lastindexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
}


//- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
//{
//    return NO;
//}


//.......tableView代理的方法........
//tableview将开始滚动的时候方法
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView
{
    [self.view endEditing:YES];
    
}



//.......tableview数据源方法的实现.......
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.messageFrames.count;
}

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //1.获取数据模型
    CZMessageFrame * modelFrame = self.messageFrames[indexPath.row];
    //2.创建cell
    //UITableViewCell * cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
    //2.创建单元格,可以封装到类方法中
    static NSString *ID = @"message_cell";
    CZMessageCell *cell = [[CZMessageCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    //3.将数据模型设置给cell
    //cell.textLabel.text = @"hello";
    cell.messageFrame = modelFrame;
    //4.返回cell
    return cell;
}

//设置每个cell的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //获取模型对象
    CZMessageFrame * messageFrame = self.messageFrames[indexPath.row];
    return  messageFrame.rowHeight;
}


@end
